package com.chenfan.mcn.dao;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chenfan.common.extension.mybatisplus.enhanced.EnhancedBaseMapper;
import com.chenfan.mcn.model.CustomerTarget;
import com.chenfan.mcn.model.McnPage;
import com.chenfan.mcn.model.dto.CustomerTargetSearchDTO;
import com.chenfan.mcn.model.vo.CusBasicExportVO;
import com.chenfan.mcn.model.vo.CusTargetAmountVO;
import com.chenfan.mcn.model.vo.CustomerTargetPageVO;
import com.chenfan.mcn.model.vo.QuarterTargetPageVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 重点客户目标 Mapper 接口
 * </p>
 *
 * @author lizhejin
 * @since 2021-04-22
 */
public interface CustomerTargetMapper extends EnhancedBaseMapper<CustomerTarget> {

    /**
     * 客户目标按客户维度分页列表
     *
     * @param mcnPage {@link McnPage}
     * @param dto     {@link CustomerTargetSearchDTO}
     * @return
     */
    Page<CustomerTargetPageVO> customerTargetPage(McnPage<CustomerTargetPageVO> mcnPage, @Param("dto") CustomerTargetSearchDTO dto);

    /**
     * 季度销售额更新落库
     *
     * @return Integer
     */
    Integer updateQuarterSales();

    /**
     * 更新目标达成率=季度销售额/目标金额
     *
     * @return Integer
     */
    Integer updateTargetReachRate();

    /**
     * 客户目标指定客户下季度维度分页列表
     *
     * @param mcnPage    {@link McnPage}
     * @param customerId
     * @return
     */
    Page<QuarterTargetPageVO> quarterTargetPage(McnPage<QuarterTargetPageVO> mcnPage, @Param("customerId") Long customerId);

    /**
     * 导出重点客户目标(查询基础原始数据)
     *
     * @param dto {@link CustomerTargetSearchDTO}
     * @return List<CusBasicExportVO>
     */
    List<CusBasicExportVO> exportTarget(@Param("dto") CustomerTargetSearchDTO dto);

    /**
     * 对应客户下，此商务季度销售额（对应客户下，此商务创建的收入合同创建时间在筛选项的季度编号对应的季度时间范围内，且单据状态为【审批中】和【审批通过】的所有收入合同，【商务确认合同金额】总金额之和）
     *
     * @param quarterCode
     * @param targetIds
     * @return List<CusTargetAmountVO>
     */
    List<CusTargetAmountVO> exportBusinessAmount(@Param("quarterCode") String quarterCode, @Param("targetIds") List<Long> targetIds);

    /**
     * 客户季度销售额（此客户下的收入合同创建时间在筛选项的季度编号对应的季度时间范围内，且单据状态为【审批中】和【审批通过】的所有收入合同，【商务确认合同金额】总金额之和）
     *
     * @param targetIds
     * @param quarterCode
     * @return List<CusTargetAmountVO>
     */
    List<CusTargetAmountVO> exportCustomerAmount(@Param("quarterCode") String quarterCode, @Param("targetIds") List<Long> targetIds);
}
